10 OPEN 1,8,1,"0:OBJECT,P" 20 OPEN 4,4 30 SYS700 40 *=$0801 ;BASIC LOAD ADDRESS! 50 .OPT N,P4,O1 60 ;********************************** 70 ;* 80 ;* COPYRIGHT 1986,87,88,89,90,91,92 90 ;* BY GRE(null)RY ROBERT SCHIEDLER 100 ;* 12906 DOWNS ROAD NE 110 ;* MOUNT ANGEL, OR 97362 120 ;* (503)845-2802 (503)845-6821 130 ;* ALL RIGHTS REVERVED... 140 ;* 150 ;********************************* 160 ; DEFINITIONS/EQUATES FOR 170 ; EXTERNAL LABEL REFERENCES 180 ; 190 FRETOP = $33 200 MSGFLG = $9D 210 MASK01 = $9E 220 MASK02 = $9F 230 TAPE1 = $B2 240 LSTX = $C5 250 ; 260 ;FREE ZERO PAGE USER LOCATIONS 270 ; 280 USR01 = $FB 290 USR02 = $FC 300 USR03 = $FD 310 USR04 = $FE 320 ; 330 ;DISK NAME & ID BYTE LOCATIONS 340 ; 350 DISKNAME =$0807 360 ID01 = $0819 370 ID02 = $081A 380 ; 390 BUFF1C00 = $1C00 ;NAME STRING UNDER GRAPHICS 400 NAMEBUFF = $1F00 ;CURRENT NAME FOR LOAD 410 MOVEIT = $A3BF ;BASIC SUBROUTINE TO MOVE CODE 420 ; 430 ;SCREEN COLOR POKES 440 ; 450 BORDER = $D020 460 BKGRND = $D021 470 ; 480 ;KERNAL SUBROUTINE CALLS 490 ; 500 SETMSG = $FF90 ;CONTROL KERNAL MESSAGES 510 SETLFS = $FFBA ;SET LOCICAL 1ST & 2ND ADDRESS 520 SETNAM = $FFBD ;SET FILE NAME 530 OPEN = $FFC0 ;OPEN A LOGICAL FILE 540 CHKOUT = $FFC9 ;OPEN A CHANNEL FOR OUTPUT 550 CHROUT = $FFD2 ;OUTPUT A CHARACTER A-REG 560 LOAD = $FFD5 ;LOAD RAM FROM DEVICE 570 CLALL = $FFE7 ;CLOSE ALL FILES AND CHANNELS 580 ; 590 ;--------------------------------- 600 ONLYML _ 1 ;SET TO 1 OR 0 610 ;--------------------------------- 620 ; SET TO 1 TO ASSEMBLE ONLY THE 630 ; CODE @ $8000 PURE M/L 640 ; SET TO 0 TO ASSEMBLE THE BASIC 650 ; LOADER & THE M/L @ $8000 660 ; NOTE!!! YOU MUST THEN LOAD THE 670 ; OBJECT WITH A MONITOR AND REMOVE 680 ; ALL THE JUNK BYTES THE ASSEMBLER 690 ; PADDED INTO THE OBJECT FILE... 700 ;--------------------------------- 710 ; 720 *=$0801 ;ORIGINAL P/C 730 ; 740 .IF ONLYML:.GOTO1040 750 ; 760 .BAS 770 SYS"ENTER"REM GRAPHIC PRINTER V2.01 780 END 790 ; 800 ;-------------------------------- 810 ; 820 ENTER LDA #>ML ;HIGH BYTE LOAD ADDR 830 STA $60 840 LDA #LAST-$8000+ML ;HIGH LIMIT 870 STA $5B 880 LDA #LAST ;TARGET ADDRESS HI LIMIT 930 STA $59 940 JSR MOVEIT ;(null) THE CODE UP!!! 950 JMP COLD ;ENTER THE (null)ED UP CODE 960 ; 970 ML = *; 980 ; 990 ; NOTE THE ASSEMBLER WILL PAD THE 1000 ; OBJECT FILE WITH JUNK FROM HERE 1010 ; TO THE M/L @ $8000!!! 1020 ; 1030 ; 1040 *= $8000 ; NEW CODE @ $8000 1050 ; 1060 ; 1070 COLD LDA #$40 1080 JSR SETMSG ;TURN ON CONTORL MESSAGES 1090 LDA #$80 1100 STA MSGFLG ;FLAG $80 = DIRECT MODE 1110 LDA #$00 1120 STA BORDER 1130 STA BKGRND ;SCREEN & BORDER TO BLACK 1140 LDA #$93 1150 JSR CHROUT ;CLEAR THE SCREEN 1160 JSR PRMSG01 ; 1170 LDA #$64 1180 STA LSTX ;SET LAST KEY TO $64=NO KEY 1190 WAIT LDA LSTX 1200 CMP #$01 1210 BNE WAIT ;WAIT UNTIL USER PRESSES A KEY 1220 LDA #$00 1230 JSR SETNAM ;NO NAME 1240 LDA #$04 1250 LDX #$04 1260 LDY #25 ;PRINTER INTERFACE INITILIZATION 4,4,25 1270 JSR SETLFS 1280 JSR OPEN ;OPEN LFN #4 1290 LDX #$04 1300 JSR CHKOUT ;SET LFN #4 TO OUTPUT 1310 LDA #$00 1320 JSR CHROUT ;OUTPUT A NULL 1330 JSR CLALL ;CLOSE ALL FILES 1340 JSR FILL1 ;FILL GRAPHIC FILE AREA $2000-$4800 1350 LDA #10 1360 STA LPCNT01 ;SET LOOP COUNTER TO 10 1370 LDA #$93 1380 JSR CHROUT ;CLEAR THE SCREEN 1390 JSR DIRLOAD ;LOAD DIRECTORY @ $0801 ON UP 1400 LDA #$08 1410 STA XCHGLO 1420 STA XCHGHI ;INDIRECTION ($0808) 1430 LDA #11 1440 STA ROWCNT ;11 ROWS PER PAGE 1450 JSR NAMEID ;PROCESS DISK DIRECTORY NAME AND ID 1460 JSR PRNAMEID ;PRINTOUT THE DISK NAME AND ID 1470 BR02 JSR FILL3 ;FILL 1C00-1CFF 1480 LDA #$00 1490 STA FRETOP 1500 LDA #$1C 1510 STA FRETOP+1 ;STRINGS TO --$1C00= 1520 PHA 1530 LDA #$93 1540 JSR CHROUT ;CLEAR THE SCREEN 1550 PLA 1560 JSR LOADEM ;LOAD 10 GRAPHICS <$2000-$4800> 1570 STA LPCNT01 ;# OF GRAPHICS LOADED A-REG 1580 CMP #$00 ;EXIT IF NO GRAPHICS WERE LOADED 1590 BEQ BR04 ;BRANCH AND EXIT 1600 LDA #$20 1610 STA INDHI01 1620 LDA #$00 1630 STA INDLO01 ;SET TO $2000 START OF FILES IN RAM 1640 STA FLAG01 ;FLAG 0=NORMAL $FF=/PRINT 1650 JSR PROCESS ; 1660 JSR PROCESS ; 1670 JSR PROCESS ;PROCESS GRAPHIC INTO PRINTER BUFFER 1680 JSR PROCESS ;6 NORMAL PASSES 1690 JSR PROCESS ; 1700 JSR PROCESS ; 1710 LDA #$FF ;SET FLAG FOR AND WITH $F0 1720 STA FLAG01 ;SET THE FLAG 1730 JSR PROCESS ;PROCESS 7TH ROW 1740 JSR PRNAMES ;PRINT GRAPHIC NAMES UNDER GRAPHICS 1750 DEC ROWCNT ;COUNTER FOR NEXT PAGE TITLE 1760 BNE BR03 ;IF NOT ZERO CONTINE WITH CURR PAGE 1770 JSR FORMFEED ;LEAVE SOME SPACE BETWEEN ROWS 1780 JSR PRNAMEID ;LABEL NEXT PAGE OF GRAPHICS 1790 LDA #11 ;11 ROWS/PAGE 1800 STA ROWCNT ;RESET COUNTER 1810 BR03 LDA LPCNT01 1820 CMP #10 ;CHECK THE LOOP COUNTER 1830 BEQ BR02 1840 BR04 JSR FORMFEED ;FORMFEED AND EXIT!!! 1850 JSR CLALL ;CLOSE ALL FILES 1860 JMP COLD ;(null) IT AGAIN SAM!!! WAS (RTS) 1870 ; 1880 ;--------------------------------- 1890 ; 1900 PROCESS = * ; 1910 JSR PRMSG03 ;PRINT THINKING MESSAGE 1920 JSR FILL2 ;FILL $5000-$53FF PRINTER BUFFER 1930 LDA #$00 1940 STA USR03 ;SET THE LOW BYTE $00 1950 LDA #$50 1960 STA USR04 ;HIGH BYTE $50 <$5000 GRAPHIC BUFFER> 1970 LDX #$00 1980 BR05 LDA INDLO01 1990 STA USR01 ;SET THE LOW BYTE $00 2000 LDA INDHI01 2010 STA USR02 ;HIGH BYTE $20 <$2000 RAM FILE STORAGE> 2020 JSR PROCESS1 ; 2030 LDA #8 2040 CLC 2050 ADC USR03 ;ADD 8 TO BUFFER INDIRECTION 2060 STA USR03 ;STORE THE NEW VALUE 2070 BCC BR06 ;TEST TO SEE IF INC. 2080 INC USR04 ;INC. 2090 BR06 LDA #4 2100 CLC 2110 ADC INDHI01 ;INC. HI BYTE BY 4 PAGES $2000 2120 STA INDHI01 ;STORE THE NEW VALUE 2130 INX ;INCRAMENT THE LOOP COUNTER 2140 CPX #10 ;TEST THE LOOP COUNTER 2150 BNE BR05 2160 LDA INDLO01 ;SUBTRACT 168 2170 SEC ;SET THE CARRY 2180 SBC #168 2190 STA INDLO01 ;STORE THE NEW VALUE 2200 BCS BR07 2210 DEC INDHI01 ;DEC. THE HI BYTE 2220 BR07 LDA INDHI01 2230 SEC ;SET THE CARRY 2240 SBC #39 ;SUBTRACT 39 2250 STA INDHI01 ;STROE THE NEW VALUE 2260 LDA FLAG01 ;FLAG=0 SKIP AND $F0 ROUTINE 2270 BEQ BR09 ;BRANCH AROUND AND ROUTINE IF NORMAL 2280 LDA USR01 2290 PHA ;SAVE $FB ON STACK 2300 LDA USR02 2310 PHA ;SAVE $FC ON STACK 2320 LDY #$00 2330 TYA 2340 STA USR01 ;SET LOW BYTE TO $00 2350 LDA #$50 2360 STA USR02 ;SET HIGH BYTE TO $50 <$5000> 2370 LDX #$04 ;SET LOOP COUNTER 2380 BR08 LDA (USR01),Y 2390 AND #%11110000 2400 STA (USR01),Y ;AND OFF LOW NIBBLE 2410 INY 2420 BNE BR08 ;LOOP 2430 INC USR02 ;INCRAMENT HIGH BYTE OF INDIRECTION 2440 DEX ;DECRAMENT LOOP COUNTER 2450 BNE BR08 ;TEST LOOP COUNTER/LOOP UNTIL DONE 2460 PLA 2470 STA USR02 ;RESTORE $FC 2480 PLA 2490 STA USR01 ;RESTORE $FB 2500 LDA #$00 2510 STA FLAG01 ;RESET THE FLAG TO 0 NORMAL PRINT 2520 BR09 JSR PRMSG02 ;WAITING FOR PRINTER MESSAGE 2530 LDX #$50 ;HIGH BYTE 2540 LDY #$00 ;LOW BYTE 2550 JSR PRGRAPH ;PRINT THE GRAPHIC BUFFER INDEX X,Y 2560 RTS ;RETURN TO MAINLINE 2570 ; 2580 ;--------------------------------- 2590 ; 2600 LOADEM = * ; 2610 JSR FILL1 ;FILL GRAPHIC AREA $2000-$47FF WITH 0'S 2620 LDA #$00 2630 STA GRAPHICS ;RESET THE # OF GRAPHICS LOADED 2640 STA TAPE1 ;SET LOAD ADDRESS LOW BYTE 2650 LDA #$20 2660 STA TAPE1+1 ;SET HI BYTE LOAD ADDRESS 2670 LOOP01 JSR SEARCH ;SEARCH FOR NEXT NAME 2680 BNE BR10 2690 LDA GRAPHICS ;A-REG = # LOADED 2700 RTS 2710 ; 2720 BR10 JSR FILELOAD ;LOAD THE GRAPHIC 2730 BCS LOOP01 2740 LDX #$00 ;ZERO THE INDEX 2750 LDY #$00 ;ZERO LENGTH 2760 LOOP02 LDA NAMEBUFF,X ;LOAD THE CURRENT NAME 2770 CMP #$22 ;SCAN FOR A QUTOE MARK 2780 BEQ BR11 ;BRANCH IF QUOTE FOUND 2790 STA (FRETOP),Y ;XFER NAME INTO NAME STRING 2800 INY ;INC LENGTH 2810 INX ;INC INDEX 2820 JMP LOOP02 ;LOOP AROUND 2830 ; 2840 BR11 INC GRAPHICS ;INC. # OF FILES LOADED 2850 LDA GRAPHICS ;LOAD # OF FILES LOADED 2860 TAX ;X-REG # OF FILES LOADED 2870 LDA INDEX,X ;INDEX BYTE TO POSITION NAME'S 2880 STA FRETOP 2890 LDA #10 ;SETUP TEST FOR 10 FILES 2900 CMP GRAPHICS ;TEST TO SEE IF 10 FILES LOADED? 2910 BNE ANOTHER ;IF NOT 10 FILES LOAD ANOTHER FILE 2920 LDA GRAPHICS ;A-REG = # OF FILES LOADED 2930 RTS 2940 ; 2950 ANOTHER LDA #$04 ;ADD 4 TO HIGH BYTE 2960 CLC ;CLEAR THE CARRY BIT 2970 ADC TAPE1+1 ;ADD 4 2980 STA TAPE1+1 ;STORE NEW VALUE 2990 JMP LOOP01 ;LOOP AND LOAD ANOTHER FILE 3000 ; 3010 ;--------------------------------- 3020 ; 3030 SEARCH = * ;SEARCH DIR. FOR 3 BLOCK FILE NAMES 3040 JSR XCHANGE ;EXC. USER01-USER02 -W- XCHGLO XCHGHI 3050 BR13 JSR INCLOAD ;LOAD NEXT BYTE 3060 BNE BR13 ;ZERO BYTE IS FOUND END OF PREV. NAME 3070 JSR INCLOAD 3080 CMP #$01 3090 BNE BR13 3100 JSR INCLOAD 3110 CMP #$01 3120 BNE BR13 ;CHECK FOR 2 $01 BYTES IN A ROW 3130 JSR INCLOAD 3140 JSR INCLOAD 3150 JSR INCLOAD ;SKIP 3 BYTES 3160 CMP #$42 ;CHECK FOR THE B IN EOF... 3170 BNE BR14 3180 JSR XCHANGE ;RESTORE FB & FC 3190 LDA #$00 ;EXIT FLAG 3200 RTS 3210 ; 3220 BR14 JSR DECLOAD ;BACKUP 1 BYTE 3230 BNE BR13 ;IF 0 CONTINE SEARCH 3240 JSR DECLOAD ;BACKUP ANOTHER BYTE 3250 CMP #$03 ;CHECK FOR A 3 BLOCK FILE(S) GRAPHICS 3260 BNE BR13 ;IF NOT 3 BLOCKS CONTINE SEARCH 3270 BR15 JSR INCLOAD 3280 CMP #$22 3290 BNE BR15 ;SCAN FOR 1ST QUOTE AROUND FILE NAME 3300 LDX #$00 ;ZERO NAME LENGTH/INDEX 3310 BR16 JSR INCLOAD 3320 STA NAMEBUFF,X ;PROCESS NAME 3330 INX 3340 CMP #$22 ;SCAN FOR ENDING QUOTE 3350 BNE BR16 3360 JSR XCHANGE ;RESTORE FB & FC 3370 DEX ;DEC LENGHT 1 TOO MANY -ENDING QUOTE 3380 TXA 3390 RTS ;RETURN WITH LENGHT IN A AND NAME IN NAMEBUFF 3400 ; 3410 ;--------------------------------- 3420 ; 3430 INCLOAD = * ;INC. INDIRECTION AND LOAD BYTE A-REG 3440 LDY #$00 ;ZERO INDEX 3450 INC USR01 ;INCREMENT LO BYTE 3460 BNE BR17 ;TEST TO SEE IF NEED TO INC. HIGH BYTE 3470 INC USR02 ;INC. HIGH BYTE IF NECCESSARY 3480 BR17 LDA (USR01),Y ;LOAD THE BYTE 3490 RTS ;RETURN WITH BYTE IN A-REG 3500 ; 3510 ;--------------------------------- 3520 ; 3530 DECLOAD = * ; DEC. INDIRECTION AND LOAD BYTE A-REG 3540 LDY #$00 ;ZERO INDEX 3550 TYA 3560 CMP USR01 ;TEST FOR ZERO 3570 BNE BR18 ;TEST TO SEE IF NEED TO DEC. HIGH BYTE 3580 DEC USR02 ;DEC HIGH BYTE 3590 BR18 DEC USR01 ;DEC LOW BYTE 3600 LDA (USR01),Y ;LOAD THE BYTE 3610 RTS ;RETURN WITH BYTE IN A-REG 3620 ; 3630 ;--------------------------------- 3640 ; 3650 XCHANGE = * ;EXCHANGE (FB,FC) -W- (XCHGLO,XCHGHI) 3660 PHA ;SAVE PASSED A-REG 3670 LDA USR01 3680 PHA ;SAVE $FB ON STACK 3690 LDA USR02 3700 PHA ;SAVE $FC ON STACK 3710 LDA XCHGLO 3720 STA USR01 ;RESET $FB 3730 LDA XCHGHI 3740 STA USR02 ;RESET $FC 3750 PLA ;PULL $FC FROM STACK 3760 STA XCHGHI ;TEMP. STORE $FC 3770 PLA ;PUFF $FB FROM STACK 3780 STA XCHGLO ;TEMP. STORE $FB 3790 PLA ;RESTORE PASSED A-REG 3800 RTS ;RETURN TO MAINLINE 3810 ; 3820 ;--------------------------------- 3830 ; 3840 PROCESS1 = * ;FILE BYTES=>BUFFER BYTES 3850 LDA #$00 3860 STA LPCNT04 ;RESET THE LOOP COUNTER 3870 BR19 JSR PROCESS2 ;PROCESS 8 BIT COLUMNS 3880 INC USR01 ;ADV FILE BYTE 3890 BNE BR20 ;INDIRECTION TO 3900 INC USR02 ;NEXT BYTE... 3910 BR20 INC LPCNT04 ;INCRAMENT LOOP COUNTER 3920 LDA #11 ;11 BYTES / ROW 3930 CMP LPCNT04 ;TEST THE LOOP COUNTER 3940 BNE BR19 ;IF < 11 LOOP 3950 RTS ;RETURN TO PROCESS 3960 ; 3970 PROCESS2 = * ;PROCESS 8 BIT ROWS 3980 LDA #%10000000 ; 128,64... 3990 STA MASK02 ;SET THE MASK 4000 BR21 JSR PROCESS3 ;PROCESS A SING. BIT ROW 4010 INC USR03 ;ADV. PRINTER BUFFER 4020 BNE BR22 ;INDIRECTION TO NEXT 4030 INC USR04 ;BYTE... 4040 BR22 LSR MASK02 ;SHIFT RIGHT 1 4050 LDA #$00 ;TEST IF 8 ROWS OF 1 COLUMN (null)NE 4060 CMP MASK02 ;TEST THE MASK FOR 0 4070 BNE BR21 ;IF NOT 0 LOOP UNTIL 0 4080 RTS ;RETURN TO PROCESS1 4090 ; 4100 PROCESS3 = * ;PROCESS A SINGLE BIT COLUMN 4110 LDA #%10000000 ; 4120 STA MASK01 ;SET THE MASK 4130 LDY #$00 ;ZERO THE INDEX 4140 BR23 LDA (USR01),Y ;LOAD FILE BYTE 4150 AND MASK02 ; 4160 BEQ BR24 ;BRANCH IF BIT NOT SET 4170 LDA MASK01 ;LOAD ROW VALUE TO OR IN BUFFER 4180 STY STOREY ;STORE THE CURRENT INDEX BYTE 4190 LDY #$00 ;TEMP RESET THE INDEX 4200 ORA (USR03),Y ;OR'D IN VALUE INTO A-REG 4210 STA (USR03),Y ;STORE OR'D VALUE BACK TO BUFFER 4220 LDY STOREY ;RETRIEVE INDEX BYTE 4230 BR24 LSR MASK01 ; 4240 TYA ;TRANSFER INDEX BYTE TO A-REG 4250 CLC ;CLEAR THE CARRY 4260 ADC #11 ;ADD 11 TO INDEX BYTE 4270 TAY ;CHANGE THE INDEX 4280 CMP #99 ;8*11=88+11 4290 BNE BR23 ;1 COLUMN PROCESSED 4300 RTS ;RETURN TO PROCESS2 4310 ; 4320 ;--------------------------------- 4330 ; 4340 FILL1 = * ;FILL $2000-$4800 WITH 0'S FILE STORAGE 4350 LDA USR01 4360 STA STOREFB ;TEMP. SAVE $FB 4370 LDA USR02 4380 STA STOREFC ;TEMP. SAVE $FC 4390 LDA #$20 4400 STA USR02 ;SET HIGH BYTE $20 4410 LDA #$00 4420 STA USR01 ;SET LOW BYTE $00 <$2000> 4430 LDX #($48-$20) ;SET LOOP CONTER TO 40 PAGES 4440 TAY ;ZERO THE INDEX 4450 BR25 STA (USR01),Y 4460 INY 4470 BNE BR25 ;ZERO OUT 1 PAGE 4480 INC USR02 ;INCRAMENT HIGH BYTE 4490 DEX ;DECRAMENT LOOP COUNTER 4500 BNE BR25 ;LOOP IF LOOP CONTER >0 4510 LDA STOREFB 4520 STA USR01 ;RESTORE $FB 4530 LDA STOREFC 4540 STA USR02 ;RESTORE $FC 4550 RTS ;RETURN TO MAINLINE 4560 ; 4570 ;--------------------------------- 4580 ; 4590 FILL2 = * ;FILL 5000-53FF WITH 0'S PRINTER BUFFER 4600 LDA USR01 4610 STA STOREFB ;SAVE ORIGINAL $FB 4620 LDA USR02 4630 STA STOREFC ;SAVE ORIGINAL $FC 4640 LDA #$50 4650 STA USR02 ;SET HI BYTE TO $50 4660 LDA #$00 4670 STA USR01 ;SET LO BYTE TO $00 <$5000> 4680 LDX #$04 ;SET UP LOOP COUNTER TO 4 PAGES 4690 TAY ;ZERO THE INDEX BYTE 4700 BR26 STA (USR01),Y ;FILL $5000-$53FF 4710 INY 4720 BNE BR26 ;FILL 1 PAGE 4730 INC USR02 ;INCRAMENT THE HIGH BYTE OF INDIRECTION 4740 DEX ;DECRAMENT THE LOOP COUNTER 4,3,2,1,0 4750 BNE BR26 ;LOOP AROUND IF 4 PAGES NOT DONE 4760 LDA STOREFB 4770 STA USR01 ;RESTORE ORIGINAL $FB 4780 LDA STOREFC 4790 STA USR02 ;RESTORE ORIGINAL $FC 4800 RTS ;RETURN TO MAINLINE 4810 ; 4820 ;--------------------------------- 4830 ; 4840 MASK .ASC "$0:*=P" 4850 MASKLEN = *-MASK 4860 ; 4870 DIRLOAD = * ;SUBROUTINE TO LOAD DIRECTORY @ $0801 4880 ;LDA #$24 ;A DOLLAR SIGN 4890 ;STA NAMEBUFF ;SET FILE NAME TO A DOLLAR SIGN 4900 LDY #$00 ;MOVE THE MASK INTO BUFFER 4910 BR42 LDA MASK,Y ;LOAD A BYTE 4920 STA NAMEBUFF,Y ;STORE A BYTE 4930 INY 4940 CPY #MASKLEN ;EXIT ? 4950 BNE BR42 ;LOOP UNTIL DONE 4960 LDA #$08 4970 STA TAPE1+1 ;HIGH BYTE LOAD ADDR. 4980 LDA #$01 4990 STA TAPE1 ;LOW BYTE LOAD ADDR. ONLY FOR DIRECTORY 5000 LDA #MASKLEN ;LOAD THE MASK LENGTH 5010 FILELOAD PHA ;PUSH NAME LENGTH 5020 LDA #$00 5030 LDX #$08 5040 LDY #$00 5050 JSR SETLFS ;SET LFN #0 TO 0,8,0 5060 PLA ;PULL FILE LENGTH FROM STACK 5070 LDX #NAMEBUFF ;NAME IN NAMEBUFF @ $1F00 5090 JSR SETNAM ;SET UP FOR THE LOAD 5100 LDA #$00 ;0=LOAD FLAG 5110 LDX TAPE1 ;SET LOAD ADDRESS LO BYTE 5120 LDY TAPE1+1 ;SET LOAD ADDRSS HIGH BYTE 5130 JSR LOAD ;LOAD DIRECTORY OR NAME INTO RAM 5140 RTS ;RETURN TO MAINLINE 5150 ; 5160 FILL3 = * ;FILL GRAPHIC NAME STRING WITH SPACES 5170 LDY #$00 ;ZERO THE INDEX 5180 LDA #$20 ;LOAD A-REG WITH AN ASCII SPACE 5190 BR27 STA BUFF1C00,Y 5200 INY 5210 BNE BR27 ;FILL THE PAGE WITH SPACES 5220 RTS ;RETURN TO MAINLINE 5230 ; 5240 PRNAMES = * ;PRINT OUT GRAPHIC NAME STRING 5250 JSR CLALL ;CLOSE ALL FILES 5260 LDA #$04 5270 LDX #$04 5280 LDY #$FF 5290 JSR SETLFS ;SET LFN #4 4,4 5300 LDA #$00 5310 JSR SETNAM ;NO NAME 5320 JSR OPEN ;OPEN LFN #4 5330 LDX #$04 5340 JSR CHKOUT ;SET LFN #4 FOR OUTPUT 5350 LDY #$00 5360 BR28 LDA ESC01,Y ;TURN OFF MODES SET CONDENSED 5370 JSR CHROUT ;OUTPUT ESC CODES 5380 INY ;INCRAMENT INDEX 5390 CPY #LEN01 ;LENGTH OF ESCAPE TABLE LENGTH 5400 BNE BR28 ;LOOP UNTIL ESC CODE ARE ALL SENT 5410 LDY #$00 ;ZERO THE INDEX 5420 BR29 LDA BUFF1C00,Y ;OUTPUT GRAPHIC NAME STRING 5430 JSR CHROUT ;OUTPUT THE NAMES 5440 INY ;INCRAMENT THE INDEC 5450 CPY #135 ;OUTPUT 135 BYTES 5460 BNE BR29 ;LOOP UNTIL STRING IS OUTPUT 5470 LDA #10 ;SET A-REG TO ASCII L/F 5480 JSR CHROUT 5490 JSR CHROUT ;OUTPUT 3 L/F 5500 JSR CHROUT 5510 JSR CLALL ;CLOSE ALL FILES 5520 RTS ;RETURN TO MAINLINE 5530 ; 5540 NAMEID = * ;PROCESS DISK NAME AND ID FROM DIR. 5550 LDX #$00 ;NUKE THE OLD NAME! 5560 LDA #$20 ; 5570 BR44 STA DIRNAME,X 5580 INX 5590 CPX #19 ;16,2 5600 BNE BR44 5610 LDX #$00 5620 LOOP03 LDA DISKNAME,X ;LOAD IN DISK NAME FROM RAM 5630 CMP #34 ;SCAN FOR ENDING QUOTE 5640 BEQ BR30 ;BRANCH IF QUOTE FOUND 5650 STA DIRNAME,X ;STORE DISK NAME INTO OUTPUT BUFFER 5660 INX 5670 JMP LOOP03 ;LOOP AROUND UNTIL QUOTE FOUND 5680 ; 5690 BR30 DEX ;QUOTE FOUND SO DEC THE INDEX BY ONE 5700 LDA DISKNAME,X ;REVERSE SCAN! 5710 CMP #32 ;SCAN TO REMOVE TRAILING SPACES 5720 BEQ BR30 5730 LDA #44 ;ADD A COMMA BETWEEN NAME AND ID 5740 INX ;INCRAMENT INDEX TO 1ST TRAILING SPACE 5750 STA DIRNAME,X ;REPLACE THE SPACE WITH A COMA 5760 INX 5770 LDA ID01 5780 STA DIRNAME,X ;LOAD AND STORE 1ST ID BYTE 5790 INX 5800 LDA ID02 5810 STA DIRNAME,X ;LOAD AND STORE 2ND ID BYTE 5820 RTS 5830 ; 5840 ;--------------------------------- 5850 ; 5860 PRGRAPH = * ; 5870 STX SAVEX ;SAVE PASSED X & Y REG 5880 STY SAVEY 5890 JSR CLALL ;CLOSE ALL FILES 5900 LDA #$04 5910 LDX #$04 5920 LDY #$FF 5930 JSR SETLFS ;SET LFN #4 4,4 5940 LDA #$00 5950 JSR SETNAM ;NO NAME 5960 JSR OPEN ;OPEN LFN #4 5970 LDX #$04 5980 JSR CHKOUT ;SET LFN #4 FOR OUTPUT 5990 LDY #$00 ;ZERO INDEX BYTE 6000 BR31 LDA ESC02,Y ;LINE FEED AND GRAPHIC COMMANDS 6010 JSR CHROUT ;OUTPUT ESC CODES TO PRINTER 6020 INY ;INCRAMENT INDEX 6030 CPY #LEN02 ;DEFINE LOOP CONTER FROM TABLE LENGTH 6040 BNE BR31 ;LOOP IF NOT DONE 6050 LDA USR01 6060 STA SAVEFB 6070 LDA USR02 6080 STA SAVEFC ;TEMP. SAVE FB & FC 6090 LDA SAVEX 6100 STA USR02 ;IND. VALUES PASSED IN X-REG 6110 LDA SAVEY 6120 STA USR01 ;IND. VALUES PASSED IN Y-REG 6130 LDX #$03 ;LOOP COUNTER 3 PAGES 768 BYTES OF 960 6140 LDY #$00 ;ZERO THE INDEX 6150 BR32 LDA (USR01),Y ;LOAD NEXT BYTE 6160 JSR CHROUT ;OUTPUT A BIT IMAGE GRAPHIC BYTE 6170 INY 6180 BNE BR32 ;LOOP TO OUTPUT A PAGE 6190 INC USR02 ;INCRAMENT HIGH BYTE IND. 6200 DEX ;DECRAMENT LOOP CONTER 6210 BNE BR32 ;LOOP UNTIL 3 PAGES ARE OUTPUT 6220 LDX #192 ;SET THE LOOP COUTER TO 192 BYTES 6230 BR33 LDA (USR01),Y ;LOAD NEXT BYTE 6240 JSR CHROUT ;OUTPUT A BIT IMAGE GRAPHIC BYTE 6250 INY ;INC. INDEX 6260 DEX ;DEC. LOOP COUNTER 6270 BNE BR33 ;TEST LOOP COUNTER/LOOP UNTIL 0 6280 JSR CLALL ;CLOSE ALL FILES 6290 LDA SAVEFB 6300 STA USR01 6310 LDA SAVEFC 6320 STA USR02 ;RESTORE FB & FC 6330 LDX SAVEX ;RESTORE PASSED X & Y REG. 6340 LDY SAVEY 6350 RTS ;RETURN TO MAINLINE 6360 ; 6370 ;--------------------------------- 6380 ; 6390 PRNAMEID = * ;PRINT DISK NAME & ID AT TOP OF FORM 6400 JSR CLALL ;CLOSE ALL FILES 6410 LDA #$04 6420 LDX #$04 6430 LDY #$FF 6440 JSR SETLFS ;SETUP LFN #4 6450 LDA #$00 6460 JSR SETNAM ;NO NAME 6470 JSR OPEN ;OPEN LFN #4 6480 LDX #$04 6490 JSR CHKOUT ;SET LFN 4 TO OUTPUT 6500 LDY #$00 6510 LOOP04 LDA TITLE,Y ;PRINT SHEET TITLE, DISK NAME 6520 CMP #$0C ;SCAN FOR THE EXIT FLAG 6530 BEQ BR34 ;EXIT IF FLAG IS FOUND 6540 JSR CHROUT ;OUTPUT THE A-REG TO THE PRINTER 6550 INY 6560 JMP LOOP04 ;LOOP AROUND UNTIL EXIT FLAG FOUND 6570 BR34 JSR CLALL ;CLOSE ALL FILES 6580 RTS ;RETURN TO THE MAINLINE 6590 ; 6600 ;--------------------------------- 6610 ; 6620 FORMFEED JSR CLALL ;CLOSE ALL FILES 6630 LDA #$04 6640 LDX #$04 6650 LDY #$FF 6660 JSR SETLFS ;SETUP LFN #4 6670 LDA #$00 6680 JSR SETNAM ;NO NAME 6690 JSR OPEN ;OPEN LFN #4 6700 LDX #$04 6710 JSR CHKOUT ;SET LFN #4 FOR OUTPUT 6720 LDY #$00 6730 BR35 LDA FORMF,Y ;OUTPUT A FORMFEED TO THE PRINTER 6740 PHA ;SAVE A-REG ON STACK 6750 JSR CHROUT ;OUTPUT THE A-REG TO PRINTER 6760 INY 6770 PLA ;RETRIEVE A-REG FROM STACK 6780 CMP #$0C ;SCAN FOR EXIT FLAG 6790 BNE BR35 ;LOOP IF NOT DONE 6800 JSR CLALL ;CLOSE ALL FILES 6810 RTS ;RETURN TO MAINLINE 6820 ; 6830 ;--------------------------------- 6840 ; 6850 ROWCNT .BYTE $09 ;11 ROWS/PAGE THEN PRINT TITLE 6860 ; 6870 MSG01 = * ;USER INSTRUCTIONS 6880 .BYTE $8E,$08 ; 6890 .ASC "[213][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][201]" 6900 .ASC "[221] [221]" 6910 .ASC "[221] [154]AUTOMATIC PRINT SHOP [221]" 6920 .ASC "[221] [154]GRAPHIC PRINTER [221]" 6930 .ASC "[221] [154]RELEASE V2.01 9-15-92 [221]" 6940 .ASC "[221] [221]" 6950 .ASC "[171][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][179]" 6960 .ASC "[221] [221]" 6970 .ASC "[221] [154]BY: GREG SCHIEDLER [221]" 6980 .ASC "[221] [154]12906 DOWNS ROAD N.E. [221]" 6990 .ASC "[221] [154]MT. ANGEL, OR 97362 [221]" 7000 .ASC "[221] [221]" 7010 .ASC "[221] [158]A DONATION WOULD BE APPRECIATED! [221]" 7020 .ASC "[221] [221]" 7030 .ASC "[171][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][179]" 7040 .ASC "[221] [221]" 7050 .ASC "[221] [154]FOR NON[146][154] COMMODORE GRAPHICS & [221]" 7060 .ASC "[221] [154]GEMINI 10X / SG-10 PRINTER [221]" 7070 .ASC "[221] [164][164][164][164][164][164][164][164][164][164][164][164] [221]" 7080 .ASC "[221] PRESS RETURN[146] [221]" 7090 .ASC "[221] [221]" 7100 .ASC "[202][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][203]" 7110 .BYTE $9A ; 7120 .BYTE 0 ;(null) FLAG 7130 ; 7140 PRMSG01 = * ;PRINT OUT USER INSTRUCTIONS TO SCREEN 7150 LDA #MSG01 ;SET THE HI BYTE 7180 STA USR02 7190 LDY #$00 ;ZERO THE INDEX 7200 BR40 LDA (USR01),Y 7210 BEQ BR41 7220 JSR CHROUT 7230 INC USR01 7240 BNE BR40 7250 INC USR02 7260 JMP BR40 7270 BR41 JSR BEEP ;GET THE USERS ATTN. 7280 RTS 7290 ; 7300 ;--------------------------------- 7310 ; 7320 MSG02 = * ;WAITING FOR PRINTER MESSAGE 7330 .BYTE $93 ; 7340 .ASC "" ; 7350 .ASC " " ; 7360 .BYTE $1C ; 7370 .ASC "WAITING FOR THE PRINTER" ;SCREEN MESSAGE. 7380 .BYTE $9A ; 7390 .BYTE $00 ;EXIT FLAG 7400 ; 7410 PRMSG02 = * ;PRINT WAITING FOR PRINTER MESSAGE 7420 LDX #$00 7430 LOOP06 LDA MSG02,X 7440 BEQ BR37 ;EXIT FLAG IF ZERO 7450 JSR CHROUT ;OUTPUT CHAR TO SCREEN A-REG 7460 INX 7470 JMP LOOP06 7480 BR37 RTS ;RETURN TO MAINLINE 7490 ; 7500 ;--------------------------------- 7510 ; 7520 MSG03 = * ;BIT STREAM THINKING MESSAGE 7530 .BYTE $93 ; 7540 .ASC "" ; 7550 .BYTE $9E ; 7555 .ASC " " ; 7560 .ASC "THINKING!" ; SCREEN MESSAGE 7570 .BYTE $00 ;EXIT FLAG 7580 ; 7590 PRMSG03 = *; PRINT OUT THINKING MESSAGE TO SCREEN 7600 LDX #$00 7610 LOOP07 LDA MSG03,X 7620 BEQ BR38 ;EXIT FLAG IF ZERO 7630 JSR CHROUT ;OUTPUT CHAR TO SCREEN A-REG 7640 INX 7650 JMP LOOP07 7660 BR38 RTS ;RETURN TO MAINLINE 7670 ; 7680 ;--------------------------------- 7690 ; 7700 BEEP = * ;RING THE BELL! 7710 JSR CLEAR ;CLEAR THE (SID) 7720 LDA #$09 7730 STA $D405 ;ENV GEN #1 7740 LDA #$1E 7750 STA $D40F ;V 3 FREQ HI 7760 LDA #$82 7770 STA $D401 ;V 1 FREQ HI 7780 LDA #$0F 7790 STA $D418 ;SET VOLUME 7800 LDA #%00101000 7810 STA $D404 ;OCC #1=0,SAWTOOTH 7820 LDA #$07 7830 STA DAT2 7840 JSR DELAY 7850 LDA #$1F 7860 STA $D404 7870 LDA #$14 7880 STA DAT2 7890 JSR DELAY 7900 JSR CLEAR 7910 RTS 7920 CLEAR LDX #$00 7930 TXA 7940 STA $D400,X 7950 CLP INX 7960 CPX #$18 ;CLEAR 24 REG'S. 7970 BNE CLP 7980 RTS 7990 DELAY LDA $A2 8000 CLC 8010 ADC DAT2 8020 STA DAT1 8030 DLP LDA $A2 8040 CMP DAT1 8050 BNE DLP 8060 RTS 8070 ; 8080 ;--------------------------------- 8090 ; 8100 DAT1 .BYTE 0 ;LOOP COUNTERS 8110 DAT2 .BYTE 0 ;BEEP ROUTINE 8120 ; 8130 ;--------------------------------- 8140 ; 8150 FLAG01 .BYTE 0 ;PRINTING FLAG STORAGE 8160 INDLO01 .BYTE 0 ;FILE IND. ($2000-$4800) 8170 INDHI01 .BYTE 0 ;FILE IND. BYTE 8180 ; 8190 ;--------------------------------- 8200 ; 8210 GRAPHICS .BYTE 0 ;# OF FILES LOADED INTO RAM 8220 ; 8230 ;--------------------------------- 8240 ; 8250 XCHGLO .BYTE 0 ;TEMP. STORAGE FOR $FB 8260 XCHGHI .BYTE 0 ;TEMP. STORAGE FOR $FC 8270 ; 8280 ;--------------------------------- 8290 ; 8300 STOREY .BYTE 0 ;INDEX VALUE TEMP. STORAGE 8310 LPCNT04 .BYTE 0 ;BYTE PROCESSING LOOP COUNTER 8320 ; 8330 ;--------------------------------- 8340 ; 8350 STOREFB .BYTE 0 ;TEMP. STORAGE FOR $FB 8360 STOREFC .BYTE 0 ;TEMP. STORAGE FOR $FC 8370 ; 8380 ;--------------------------------- 8390 ; 8400 ESC01 = * ; 8410 .BYTE 27,70 ;ESC F CANCEL EMPASIS 8420 .BYTE 27,72 ;ESC H CANCEL DOUBLE STRIKE 8430 .BYTE 27,53 ;ESC 5 CANCEL ITALICS 8440 .BYTE 27,84 ;ESC T CANCEL SUPER AND SUB 8450 .BYTE 15 ;SELECT CONDENSED PRINT 8460 .BYTE 27,51,10 ;ESC 3 10 LINE FEED TO 10/216 INCH 8470 LEN01 = * - ESC01 ;DEFINE TABLE LENGTH 8480 ; 8490 ;--------------------------------- 8500 ; 8510 SAVEFB .BYTE 0 ;TEMP. STORAGE FOR $FB 8520 SAVEFC .BYTE 0 ;TEMP. STORAGE FOR $FC 8530 SAVEX .BYTE 0 ;TEMP PASSED X-REG 8540 SAVEY .BYTE 0 ;TEMP PASSED Y-REG 8550 ; 8560 ;--------------------------------- 8570 ; 8580 ESC02 = * ;TABLE OF PRINTER ESC CODES FOR GRAPHICS 8590 .BYTE 27,51,16 ;ESC 3 16 LINE FEED TO 16/216 INCH 8600 .BYTE 27,76,$C0,$03 ;ESC L 960 BYT @ 120 DPI 8610 LEN02 = * - ESC02 ;DEFINE TABLE LENGTH 8620 ; 8630 ;--------------------------------- 8640 ; 8650 INDEX = * ;10 INDEX TO SPACE NAMES ACROSS PAGE 8660 .BYTE 0,14,28,42,56,69,83,96,111,124 8670 ; 8680 LPCNT01 .BYTE 0 ;# OF (null)S LOADED FROM DISK 8690 ; 8700 ;--------------------------------- 8710 ; 8720 TITLE = * ;ESCAPE CODES AND SHEET TITLE BUFFER 8730 .BYTE 27,64 ;ESC @ RESET THE PRINTER 8740 .BYTE 27,68,80,0 ;SET HORIZONTAL TAB @ 80 8750 .BYTE 27,71 ;ESC G DOUBLE STRIKE 8760 .BYTE 15 ;SELECT CONDENSED PRINT 8770 .BYTE 14 ;1 LINE EXPANDED PRINT 8780 .ASC "PRINTSHOP GRAPHICS ON " 8790 DIRNAME .ASC "GREG SCHIEDLER!,69 " ;16,2 NAME,ID 8800 .BYTE 20 ;CANCEL 1 LINE EXPANDED PRINT 8810 .BYTE 9 ;GOTO HORIZONTAL TAB PREVIOUSLY SET <80) 8820 .BYTE 27,83,0 ;SUPERSCRIPT ON 8830 .ASC "BY: GREG SCHIEDLER" 8840 .BYTE 10,10,13 ;2 , 8850 FORMF .BYTE $0C ;EXIT FLAG/FORM FEED 8860 ; 8870 ;--------------------------------- 8880 ; 8890 .ASC "END." 8900 ; 8910 LAST = *; 8920 .END 8930 CLOSE1